use hikrgbd::*;
use std::thread;
use std::time::{Duration, Instant};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;

fn main() {
    // 创建相机实例
    let mut camera = RGBDCamera::new().expect("创建相机失败");
    
    // 打开相机
    camera.open().expect("打开相机失败");
    
    println!("\n测试回调方式获取图像...");
    
    // 创建帧计数器和时间记录
    let frame_count = Arc::new(AtomicUsize::new(0));
    let start_time = Arc::new(Instant::now());
    let last_fps_update = Arc::new(AtomicUsize::new(0));
    
    let frame_count_clone = frame_count.clone();
    let start_time_clone = start_time.clone();
    let last_fps_update_clone = last_fps_update.clone();
    
    // 注册回调函数
    camera.register_frame_callback(move |frame| {
        // 增加帧计数
        let current_count = frame_count_clone.fetch_add(1, Ordering::SeqCst);
        
        // 计算运行时间（秒）
        let elapsed = start_time_clone.elapsed().as_secs() as usize;
        let last_update = last_fps_update_clone.load(Ordering::SeqCst);
        
        // 每秒更新一次FPS
        if elapsed > last_update {
            last_fps_update_clone.store(elapsed, Ordering::SeqCst);
            let fps = (current_count + 1) as f64 / elapsed as f64;
            println!("当前帧率: {:.2} FPS", fps);
        }

        // 遍历所有图像
        for i in 0..frame.nImageCount {
            let image = &frame.stImageData[i as usize];
            println!("  图像类型: {:?}, 宽度: {}, 高度: {}, 数据长度: {}",
                image.enImageType, image.nWidth, image.nHeight, image.nDataLen);

            // 获取图像数据
            let data = unsafe { std::slice::from_raw_parts(image.pData, image.nDataLen as usize) };

            // // 根据图像类型进行处理 添加处理后帧率约为 7.5 帧；不做处理帧率约为 23 帧
            // match image.enImageType {
            //     hikrgbd::mv3drgbd::Mv3dRgbdImageType::ImageType_YUV422 => {
            //         println!("  处理彩色图像...");
            //         let rgb_data = convert_yuv422_to_rgb(data, image.nWidth, image.nHeight);
            //         println!("  转换后的RGB数据大小: {}", rgb_data.len());
            //     }
            //     hikrgbd::mv3drgbd::Mv3dRgbdImageType::ImageType_Depth => {
            //         println!("  处理深度图像...");
            //         let rgb_data = convert_depth_to_rgb(data, image.nWidth, image.nHeight);
            //         println!("  转换后的RGB数据大小: {}", rgb_data.len());
            //     }
            //     _ => {
            //         println!("  跳过其他类型图像");
            //     }
            // }
        }
        println!("------------------------");
    }).expect("注册回调失败");
    
    // 开始采集
    camera.start().expect("启动采集失败");
    
    // 等待10秒钟接收图像
    thread::sleep(Duration::from_secs(10));
    
    // 停止采集
    camera.stop().expect("停止采集失败");
    
    // 计算最终的平均帧率
    let total_frames = frame_count.load(Ordering::SeqCst);
    let total_time = start_time.elapsed().as_secs();
    println!("\n总帧数: {}, 总时间: {}秒", total_frames, total_time);
    println!("平均帧率: {:.2} FPS", total_frames as f64 / total_time as f64);
    
    // 关闭相机
    camera.close().expect("关闭相机失败");
}